package com.剑指offer.no25;

class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode newHead = new ListNode(0), tmpNode = newHead;


        while (l1 != null && l2 != null) {
            if (l1.val <= l2.val) {
                tmpNode.next = l1;
                l1 = l1.next;
            } else {
                tmpNode.next = l2;
                l2 = l2.next;
            }
            tmpNode = tmpNode.next;
        }

        if (l1 != null) {
            tmpNode.next = l1;
        }
        if (l2 != null) {
            tmpNode.next = l2;
        }

        return newHead.next;
    }
}


class Solution01 {
    //     def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
//             if not l1:return l2
//        if not l2:return l1
//        if l1 and l2:
//             (l1, l2) = (l2, l1) if l2.val < l1.val else (l1, l2)
//     l1.next = self.mergeTwoLists(l1.next, l2)
//             return l1
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }

        if (l1.val <= l2.val) {
            l1.next = mergeTwoLists(l1.next, l2);
            return l1;
        }else {
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }
    }

    private void swapNode(ListNode l1, ListNode l2) {
        if (l1 == null || l2 == null) {
            return;
        }

        ListNode tmpNode = l2;
        l2 = l1;
        l1 = tmpNode;
        return;
    }
}